package 并发编程.this引用逃逸;

/**
 * this 引用逃逸
 * 问题描述：还没有完成的实例化ThisEscape对象的动作，却已经暴露了对象的引用。其他线程访问还没有构造好的对象，可能会造成意料不到的问题
 * 此时运行结果： num = 0  而不是 num = 10；
 * 正确解决：
 *
 * @see ThisEscapeSolver
 */
public class ThisEscape {
    private int num = 0;

    public ThisEscape() throws InterruptedException {
        new Thread(new Runnable() {
            @Override
            public void run() {
                doSomething();
            }
        }).start();
        Thread.sleep(3000);
        num = 10;
    }


    public void doSomething() {
        System.out.println("num = " + num);
    }


    public static void main(String args[]) throws InterruptedException {
        new ThisEscape();
    }

}
